数学建模 您所在的位置:网站首页 python 线性模型 数学建模

数学建模

2024-06-17 06:32| 来源: 网络整理| 查看: 265

hello,大家好。各位可点击左下方阅读原文,访问公众号官方店铺。谨防上当受骗,感谢各位支持!如果链接无法访问,公众号后台回复代码商店,即可获取官方店铺最新链接。

Hello,各位小伙伴。前一段时间在实际工作中遇到这样两个问题:

1.在构建的数学模型中,存在两个0-1决策变量相乘的情况,如 x i ∈ { 0 , 1 } x_i \in \left\{ 0,1\right\} xi​∈{0,1}, x j ∈ { 0 , 1 } x_j \in \left\{ 0,1\right\} xj​∈{0,1}, z i j = x i x j z_{ij} = x_i x_j zij​=xi​xj​,那么一个很容易想到的解决方案为如何将 z i j = x i x j z_{ij} = x_i x_j zij​=xi​xj​这个非线性表达式线性化处理。

2.在构建的数学模型中,存在1个0-1决策变量和1个连续决策变量相乘的情况,如 x ∈ { 0 , 1 } x \in \left\{ 0,1\right\} x∈{0,1}, y ∈ [ 0 , 20 ] y \in \left[ 0,20 \right] y∈[0,20], z = x y z = x y z=xy,这个问题也是同样的想法,如何将 z = x y z = xy z=xy这个非线性表达式线性化处理。

上述两个问题,应该是在构建数学模型过程中,经常会遇到的问题。但是本着想寻找更多非线性表达式线性化技巧的精神,通过查阅网上优质资料以及相关书籍,共整理了10个常见的非线性表达式线性化技巧。

分段函数绝对值函数MaxMin/MinMax函数逻辑或MaxMax/MinMin函数两个0-1变量的乘积形式1个0-1变量和1个连续变量的乘积形式分式目标函数形式Max/Min函数混合整数

线性化的主要手段其实就两点:一是引入0-1变量,二是引入很大的整数M。

(https://zhuanlan.zhihu.com/p/552076713)

本次推文只讲解分段函数、绝对值函数、MaxMin/MinMax函数、两个0-1变量的乘积形式、1个0-1变量和1个连续变量的乘积形式5个线性化技巧。

目录

分段函数绝对值函数MaxMin/MinMax函数两个0-1变量的乘积形式1个0-1变量和1个连续变量的乘积形式 分段函数

分段函数 f ( x ) f(x) f(x)的数学表达式如下: f ( x ) = { f 1 ( x ) 0 < x ≤ a f 2 ( x ) a < x ≤ b f 3 ( x ) b < x ≤ c f(x)= \begin{cases}f_1(x) & 00,1}​ 很明显,当 x = 3 x=3 x=3时, f ( x ) f(x) f(x)取最小值 − 0.25 -0.25 −0.25。

现在我们用python+gurobi对上述模型进行求解,代码如下:

from gurobipy import * model = Model('non-linear model') x = model.addVar(lb=0, ub=GRB.INFINITY, vtype=GRB.CONTINUOUS, name='x') y1 = model.addVar(lb=0, ub=1, vtype=GRB.BINARY, name='y1') y2 = model.addVar(lb=0, ub=1, vtype=GRB.BINARY, name='y2') y3 = model.addVar(lb=0, ub=1, vtype=GRB.BINARY, name='y3') bigM = 10000 epsilon = 1e-5 model.setObjective((-1 * x + 2) * y1 + (-0.5 * x + 1.25) * y2 + (x - 3) * y3, GRB.MINIMIZE) model.addConstr(x = epsilon, name='c3') model.addConstr(x


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有